package jp.co.nes.awssupport.business.utility;

import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import jp.co.nes.awssupport.business.constant.AwsProductName;
import jp.co.nes.awssupport.common.utility.AppInfoUtil;

/**
 * AwsProductNameユーティリティです。
 */
public class AwsProductNameUtil {

    /**
     * デフォルトコンストラクタです。<br>
     * 本クラスはインスタンスを生成しません。
     */
    private AwsProductNameUtil() {
    }

    /**
     * 引数で指定されたAwsProductName、製品名が同じかどうか返却します。<br>
     * なお、以下の場合、falseを返却します。<br>
     * ・AwsProductNameがnullだった場合<br>
     * ・製品名が空文字列 or nullだった場合<br>
     * ・AwsProductNameに対応する製品名が空文字列 or nullだった場合(AwsProductNameに対応する製品名が設定されていない状況)
     *
     * @param awsProductName AwsProductName
     * @param productName 製品名
     * @return true: 同じである, false: 同じでない。
     */
    public static boolean isEquals(AwsProductName awsProductName, String productName) {
        if (awsProductName == null) {
            return false;
        }
        if (StringUtils.isEmpty(productName)) {
            return false;
        }

        // AWSの製品名に関する情報をアプリケーション情報を取得する。
        Map<String, String> map = AppInfoUtil.getMap("AwsProductName");

        // AwsProductNameに該当する製品名を取得する。
        String productNameFromMap = map.get(awsProductName.name());
        if (StringUtils.isEmpty(productNameFromMap)) {
            return false;
        }

        if (!productNameFromMap.equals(productName)) {
            return false;
        }

        return true;
    }

    /**
     * 製品名に対応するAwsProductNameを返却します。
     *
     * @param productName 製品名
     * @return AwsProductName
     */
    public static AwsProductName valueOfFromProductName(String productName) {
        AwsProductName result = null;
        AwsProductName[] awsProductNames = AwsProductName.values();
        for (AwsProductName awsProductName : awsProductNames) {
            if (isEquals(awsProductName, productName)) {
                result = awsProductName;
                break;
            }
        }
        return result;
    }
}
